import Instance from "./utils/request";
import path from "./path";

const api = {

    // #region 帖子
    // 新增帖子
    Post_Add(addDTO){
        return Instance.post(path.baseUrl + "/post/add", addDTO);
    },

    // 删除帖子
    Post_Delete(id){
        return Instance.delete(path.baseUrl + "/post/delete",{
            params: {
                id: id
            }
        });
    },

    // 修改帖子
    Post_Update(updateDTO){
        return Instance.put(path.baseUrl + "/post/update", updateDTO);
    },

    // 修改帖子可见状态
    Post_UpdateVisible(postId, privacy){ 
        return Instance.put(path.baseUrl + "/post/updatePostVisible", null, {
            params: {
                id: postId,
                privacy: privacy
            },
        });
    },

    // 分页查询帖子
    Post_GetAllByPage(c, s){
        return Instance.get(path.baseUrl + "/post/getDisplayPostsListByPage",{
            params:{
                current: c,
                size: s
            }
        });
    },

    // 首页推送
    Post_FeedHome(u, c, s){
        return Instance.get(path.baseUrl + "/post/feed",{
            params:{
                uid: u,
                current: c,
                size: s
            }
        });
    },

    // 查询我关注的用户发的帖子
    Post_GetByPageAndMyFollow(uid, c, s){ 
        return Instance.get(path.baseUrl + "/post/feedByMyFollowing",{
            params:{
                userId: uid,
                current: c,
                size: s,
            }
        });
    },

    // 根据id获取帖子信息
    Post_GetById(pid, uid){
        return Instance.get(path.baseUrl + "/post/getPostInfoById",{
            params:{
                id: pid,
                userId: uid
            }
        });
    },

    // 根据用户id返回其创作的帖子信息
    Post_GetByUserId(id, c=null, s=null){
        return Instance.get(path.baseUrl + "/post/getByUserId",{
            params:{
                userId: id,
                current: c,
                size: s
            }
        });
    },

    // 根据用户id返回其点赞的帖子信息
    Post_GetByLike(id, c=null, s=null){ 
        return Instance.get(path.baseUrl + "/post/getByUserLike",{
            params:{
                userId: id,
                current: c,
                size: s
            }
        });
    },

    // 根据用户id，返回用户收藏的帖子信息
    Post_GetByCollect(id, c=null, s=null){ 
        return Instance.get(path.baseUrl + "/post/getByUserCollect",{
            params:{
                userId: id,
                current: c,
                size: s
            }
        });
    },

    // 根据标题查询帖子
    Post_GetByTitle(t, c=null, s=null){ 
        return Instance.get(path.baseUrl + "/post/getByTitle",{
            params:{
                title: t,
                current: c,
                size: s
            }
        });
    },

    // 浏览帖子
    Post_Browse(prDTO){ 
        return Instance.post(path.baseUrl + "/post/read", prDTO);
    },

    // #endregion


    // #region 点赞与收藏
    // 点赞
    Post_like(pid){ 
        return Instance.post(path.baseUrl + "/post/like", null, {
            params:{
                postId: pid
            }
        });
    },

    // 收藏
    Post_collect(pid){ 
        return Instance.post(path.baseUrl + "/post/collect", null, {
            params:{
                postId: pid
            }
        });
    },

    // 点赞--对评论  参数aod -- true为点赞，false为取消点赞
    Comment_like(cid, uid_liked, aod){ 
        return Instance.post(path.baseUrl + "/comment/like", null, {
            params:{
                cid: cid,
                userId_liked: uid_liked,
                addOrDel: aod
            }
        });
    },

    // 根据评论id集合，返回已点赞的评论id集合
    Comment_getLike(cIds){
        return Instance.post(path.baseUrl + "/comment/like-status", cIds);
    },

    //#endregion


    // #region 标签
    Tag_GetNormalTag(){
        return Instance.get(path.baseUrl + "/tag/getNormalTag");
    },
    // #endregion


    // #region 话题
    // 分页获取所有话题
    Topic_GetAllByPage(c, s){
        return Instance.get(path.baseUrl + "/topic/getAllTopicByPage",{
            params:{
                current: c,
                size: s
            }
        });
    },

    // 根据话题id（可多传）获取话题
    Topic_GetByIds(inputIds){
        const idsArray = Object.values(inputIds)
        return Instance.post(path.baseUrl + "/topic/getTopicByIds", idsArray);
    },

    // #endregion


    // #region 评论
    // 新增评论
    Comment_Add(comment){
        return Instance.post(path.baseUrl + "/comment/add", comment);
    },

    // 删除评论
    Comment_Delete(id){
        return Instance.delete(path.baseUrl + `/comment/del/${id}`);
    },

    // 修改评论

    // 分页获取某帖子的评论
    Comment_GetByPostId(postId, sr=null, c=null, s=null){ 
        return Instance.get(path.baseUrl + "/comment/get/getByPostId",{
            params:{
                postId: postId,
                sortRule: sr,
                current: c,
                size: s
            }
        });
    },

    // 获取某父评论的子评论
    Comment_GetReplies(postId, parentId, c = null, s = null){ 
        return Instance.get(path.baseUrl + "/comment/get/getReplies",{
            params:{
                postId: postId,
                cid: parentId,
                current: c,
                size: s // 后端规定一般为5条每页
            }
        });
    },

    // 查询评论--回复我的
    Comment_GetReplyToMe(c=null, s=null){ 
        return Instance.get(path.baseUrl + "/comment/getMy/getForMyRelies",{
            params:{
                current: c,
                size: s
            }
        });
    },

    // 查询评论--点赞我的
    Comment_GetLikeToMe(c=null, s=null){ 
        return Instance.get(path.baseUrl + "/comment/getMy/recent-liked",{
            params:{
                current: c,
                size: s
            }
        });
    },

    // #endregion


    // #region 用户
    // 用户修改个人资料
    User_Update(updateDTO){
        return Instance.put(path.baseUrl + "/user/update", updateDTO);
    },

    // 用户修改头像
    User_UpdateAvatar(uid, fileUrl){ 
        return Instance.put(path.baseUrl + "/user/updateAvatar", null, {
            params:{
                uid: uid,
                avatarUrl: fileUrl
            }
        });
    },

    // 根据id查询用户--返回部分信息（其他用户个人主页查询业务用）
    User_GetById_ProfileQuery(id){
        return Instance.get(path.baseUrl + "/user/getById_ProfileQuery",{
            params:{
                id: id
            }
        });
    },

    // 根据id查询用户--返回部分信息（查询帖子业务用）
    User_GetById_PostQuery(id){
        return Instance.get(path.baseUrl + "/user/getById_PostQuery",{
            params:{
                id: id
            }
        });
    },

    // 根据id批量查询用户--返回部分信息（查询会话列表用）
    User_GetById_ConvListQuery(ids){
        return Instance.post(path.baseUrl + "/user/getById_ConvListQuery", ids);
    },

    // 用户登录
    User_Login(userLoginDTO) {
        return Instance.post(path.baseUrl + "/user/login", userLoginDTO);
    },

    // 根据jwt令牌获取用户信息
    User_GetUserInfoByJwt(jwt) {
        return Instance.post(path.baseUrl + "/user/getUserInfoByJwt", null, {
            params: {
                jwt: jwt
            }
        });
    },

    // 用户注册
    register(userAddDTO) {
        return Instance.post(path.baseUrl + "/user/register", userAddDTO);
    },
    // #endregion


    // #region 关注
    /**  关注或取关
     * @param userId 关注者
     * @param followUserId 被关注者
     * @param isFollow 操作 true-关注，false-取关
     */
    Follow_follow(uid, id, isFollow){
        return Instance.put(path.baseUrl + `/follow/${id}/${isFollow}`, null, {
            params:{
                userId: uid
            }
        });
    },

    // 查询我的关注
    Follow_getMyFollow(userId, pn=null, ps=null){ 
        return Instance.get(path.baseUrl + `/follow/getFollows/${userId}`,{
            params:{
                pageNum: pn,
                pageSize: ps
            }
        });
    },

    // 根据用户名字查询我的关注
    Follow_getMyFollowByName(userId, name, pn=null, ps=null){ 
        return Instance.get(path.baseUrl + '/follow/getFollowsByName',{
            params:{
                userId: userId,
                followName: name,
                pageNum: pn,
                pageSize: ps
            }
        });
    },

    // 查询我的粉丝
    Follow_getMyFans(userId, pn=null, ps=null){ 
        return Instance.get(path.baseUrl + `/follow/getFans/${userId}`,{
            params:{
                pageNum: pn,
                pageSize: ps
            }
        });
    },

    // 查询是否关注了某用户
    Follow_isFollow(uid, id){
        return Instance.get(path.baseUrl + `/follow/isFollow/${id}`, {
            params:{
                userId: uid
            }
        });
    },

    // #endregion


    // #region 聊天
    // 发送消息
    Chat_SendNewMsg(message){ 
        return Instance.post(path.baseUrl + '/chat-message/add', message);
    },

    // 撤回消息
    Chat_RevokeMsg(msgId){ 
        return Instance.put(path.baseUrl + '/chat-message/revokeMsg', null, {
            params:{
                mid: msgId
            }
        });
    },

    // 修改用户对于某会话的最后一条阅读消息记录
    Sessions_UpdateUserLastReadMsgId(cid, mid){ 
        return Instance.put(path.baseUrl + 'conversation-user/updateLastMsg/V2', null, {
            params:{
                convId: cid,
                lastMsgId_new: mid
            }
        });
    },

    // 查询用户加入的会话，返回会话列表（不用带参数，后端在jwt中获取用户参数）
    Sessions_GetByUserId(){ 
        return Instance.get(path.baseUrl + '/conversation/queryByUser');
    },

    // 删除(清空)会话
    Sessions_Delete(conversationId){ 
        return Instance.delete(path.baseUrl + '/conversation/del', {
            params: {
                id: conversationId
            }
        });
    },
    // 根据双方id，查询会话信息，仅限私聊
    Sessions_GetWhisper(tid){ 
        return Instance.get(path.baseUrl + '/conversation/getWhisperConversation',{
            params:{
                talker_uid: tid
            }
        });
    },
    // 查询用户某个会话的聊天记录
    Chat_GetByPage(talkerId, pn=null, ps=null){ 
        return Instance.get(path.baseUrl + '/chat-message/getWhisperMsg',{
            params:{
                talker_uid: talkerId,
                pageNum: pn,
                pageSize: ps
            }
        });
    },
    // 查询用户在当前会话中上次阅读的消息id
    Chat_GetUserLastReadMsgId(cid){ 
        return Instance.get(path.baseUrl + '/conversation-user/queryLastMsg',{
            params:{
                convId: cid
            }
        });
    },

    // 查询某用户当前是否在线
    Chat_IsUserOnline(uid){ 
        return Instance.get(path.baseUrl + `/chat/user/online-status/${uid}`);
    },

    // #endregion


    // #region 通用
    // 文件删除
    fileDelete(ffp){
        return Instance.post(path.baseUrl + "/common/file/delete", null, {
            params:{
                fileFullPath: ffp
            }
        });
    },
    // jwt解析
    jwtParse(Jwt){
        return Instance.get(path.baseUrl + `/common/jwt/Parse/${Jwt}`);
    },

    // #endregion


    // #region 黑名单
    // 拉黑用户
    Blacklist_add(uid){ 
        return Instance.post(path.baseUrl + `/user-blacklist/${uid}`);
    },

    // 移除拉黑
    Blacklist_remove(uid){ 
        return Instance.delete(path.baseUrl + `/user-blacklist/${uid}`);
    },

    // 查询用户是否被当前用户拉黑
    Blacklist_isBlocked(uid){ 
        return Instance.get(path.baseUrl + `/user-blacklist/isBlocked/${uid}`);
    },

    // 查询当前用户拉黑的用户列表（黑名单）
    Blacklist_getMyBlockList(){ 
        return Instance.get(path.baseUrl + '/user-blacklist/list');
    },
    // #endregion

}

export default api;
